"""
@Project ：python
@File    ：02-异常捕获方法.py
@IDE     ：PyCharm
@Author  ：DongCha
@Date    ：2024/4/6 006 16:23
"""

# 任何程序在运行过程中，都可能出现异常，导致程序无法执行
# 在力所能及的范围内，对可能出现的异常进行提前准备，提前处理，被称之为异常处理（捕获异常）
# 基本语法：
# try:
    # 可能发生异常的代码
# except:
    # 出现异常执行的代码

try:
    f = open("./doc/test.txt", "r", encoding="utf-8")
except:
    print("文件不存在！")
    f = open("./doc/test.txt", "w", encoding="utf-8")

# 捕获指定异常
# try:
    # 可能发生异常的代码
# except 异常类名:
    # 出现异常执行的代码
# 如果尝试执行的异常类型和要捕获的异常类型不一致，则无法捕获异常
# 一般 try 下面只放一行尝试执行的代码
try:
    print(name)
except NameError as e:
    print("变量未定义")
    print(e)
    name = "DongCha"
    print(name)

# 捕获多个异常
# try:
#     可能发生异常的代码
# except [异常名1, 异常名2]:
#     出现异常执行的代码
try:
    # print(aaa)
    1 / 0
except (NameError, ZeroDivisionError) as e:
    print("出现异常")
    print(e)

# 所有异常
# 使用基础语法或者捕获 Exception 类型的异常
try:
    # 1 / 0
    f = open("./doc/aaa.txt", "r", encoding="utf")
except Exception as e:
    print(e)

# else 没有异常
try:
    print("Hello")
except Exception as e:
    print(e)
else:
    print("World")

# finally 无论那种情况，都要执行
try:
    f = open("./doc/aaa.txt", "r", encoding="utf-8")
except Exception as e:
    f = open("./doc/test.txt", "r", encoding="utf-8")
else:
    print("没有异常")
finally:
    print("执行 finally")
    f.close()
